package service;

import java.util.List;

import dto.Exposer;
import dto.SeckillExecution;
import entity.Seckill;
import exception.RepeatKillException;
import exception.SeckillCloseException;
import exception.SeckillException;

/**
 * 秒杀业务接口
 * @author Administrator
 *
 */
public interface SeckillService {
	/**
	 * 查询单条秒杀商品记录
	 * @param seckillId
	 * @return 秒杀商品
	 */
	Seckill queryById(long seckillId);
	
	/**
	 * 查询多条秒杀记录
	 * @return 多条秒杀商品
	 */
	List<Seckill> getSeckillList();
	
	/**
	 * 秒杀开启时：输出秒杀接口地址
	 * 否则：输出系统时间和秒杀时间
	 * @param seckillId
	 * @return 暴露秒杀地址dto
	 */
	Exposer exportSeckillUrl(long seckillId);
	
	/**
	 * 执行秒杀操作
	 * @param seckillId
	 * @param userPhone
	 * @param md5   加密 (用来验证执行秒杀：和内部生成的md5作比较)
	 * @return 秒杀执行结果dto
	 */
	SeckillExecution excuteSeckill(long seckillId,long userPhone,String md5)
		throws SeckillException,RepeatKillException,SeckillCloseException;
	
	/**
	 * 利用存储过程执行秒杀操作
	 * @param seckillId
	 * @param userPhone
	 * @param md5   加密 (用来验证执行秒杀：和内部生成的md5作比较)
	 * @return 秒杀执行结果dto
	 */
	SeckillExecution excuteSeckillProcedure(long seckillId,long userPhone,String md5);
}
